home *** CD-ROM | disk | FTP | other *** search
- ; by Kyzer/CSG
-
- ; IN:
- ; A0=string containing ASCII hex digits
-
- ; OUT:
- ; D0=value of hex string (32 bit)
- ; D1=validity: -1 = valid number, 0 = invalid number
-
- ; ALSO TRASHED
- ; A0/A1/D2/D3
-
- cmp.b #'$',(a0)
- bne.s .noadd
- addq.l #1,a0
- .noadd cmp.b #'0',(a0)
- bne.s .noadd2
- cmp.b #'x',1(a0)
- bne.s .noadd2
- addq.l #2,a0
- .noadd2
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
-
- .next lea .table(pc),a1
-
- .cmp move.b (a1),d2
- beq.s .fail
- addq.l #2,a1
- cmp.b (a0),d2
- bne.s .cmp
-
- move.b -1(a1),d1
- asl.l #4,d0
- add.b d1,d0
-
- addq.l #1,a0
- tst.b (a0)
- bne.s .next
-
- .done moveq #-1,d1 ; OK
- rts
- .fail moveq #0,d1 ; FAIL
- rts
-
- .table dc.b '0',0, '1',1, '2',2, '3',3, '4',4, '5',5
- dc.b '6',6, '7',7, '8',8, '9',9, 'a',10, 'A',10
- dc.b 'b',11, 'B',11, 'c',12, 'C',12, 'd',13, 'D',13
- dc.b 'e',14, 'E',14, 'f',15, 'F',15, 0,0
-